<template>
  <div id="app">
    <router-view/>
  </div>
</template>
<script>


import {mapGetters, mapState} from "vuex";

export default {
  name: 'App',
  //指定钩子函数 , 来进行实现实时接收消息
  mounted() {

    //  初始化监听器
    this.initListener()
  },
  computed: {
    ...mapState({
      //当前会话
      currentConversation: (state) => state.timMessage.currentConversation,
    }),
    ...mapGetters(['friends']),
  },
  methods: {

    //通过账号 , 查询用户的名字
    selectName(id) {
      for (let i = 0; i < this.friends.length; i++) {
        if (this.friends[i].id == id) {
          return this.friends[i].name;
        }
      }
      return '';
    },
    //  监听器
    initListener() {
      // 登录成功后会触发 SDK_READY 事件，该事件触发后，可正常使用 SDK 接口
      this.tim.on(this.TIM.EVENT.SDK_READY, this.onReadyStateUpdate, this)

      // 收到新消息
      this.tim.on(this.TIM.EVENT.MESSAGE_RECEIVED, this.onReceiveMessage)
      // 会话列表更新
      this.tim.on(
        this.TIM.EVENT.CONVERSATION_LIST_UPDATED,
        this.onUpdateConversationList
      )
    },

    // timsdk准备好了-回调方法
    onReadyStateUpdate({name}) {
      console.log('timsdk准备好了-回调方法')
      const isSDKReady = name === this.TIM.EVENT.SDK_READY
      this.$store.commit('timMessage/toggleIsSDKReady', isSDKReady)
      if (isSDKReady) {
        // 更新缓存中的用户信息
        this.$store.dispatch('timMessage/getConversationList')
      }
    },

    // 更新会话列表-回调方法，获取会话列表只能通过此方法
    onUpdateConversationList(event) {
      console.log('更新会话列表')
      this.$store.commit('timMessage/updateConversationList', event.data)
    },
    //  接收新的消息 , 回调方法
    onReceiveMessage({data: messageList}) {
      // this.$store.commit('timMessage/showMessage', {
      //   message: '消息来了',
      //   type: 'success'
      // })
      //判断消息 , 是否是删除好友的消息
      if (messageList[0].payload.data == 'DELETE') {
        //  则向vuex里面 , 删除一个自定义的好友
        this.$store.dispatch('user/deleteFriends', messageList[0].payload.description)

        //判断 , 当前处于会话 , 是否是要进行删除的会话 , 如果是 , 则清空当前聊天的会话列表
        const friend = "C2C" + messageList[0].payload.description;
        if (this.currentConversation.conversationID == friend) {
          //  则清空 , 当前会话列表
          this.$store.commit('timMessage/resetCurrent')
        }
        return;
        // 判断 , 是否是 同意请求的消息
      } else if (messageList[0].payload.data == 'ADD_REQUEST') {
        const str = messageList[0].payload.description.split('-')
        this.$store.commit('user/ADD_FRIEND', {
          id: str[0],
          name: str[1],
          url: str[2]
        })
        //提示消息
        this.$store.commit('timMessage/showMessage', {
          message: str[1] + ' : 同意了您的好友请求消息',
          type: 'success'
        })
        return;
        //判断 , 消息是不是当前会话的消息
      } else if (messageList[0].conversationID === this.currentConversation.conversationID) {
         console.log("是当前会话的消息");
        this.$bus.$emit('scroll-bottom')
        //把当前会话的消息 , 进行已读上报
        this.$store.dispatch('timMessage/setCurrentConversationMessageRead')
      }
      //把消息 , 存放到Vuex里面
      this.$store.commit('timMessage/pushCurrentMessageList', messageList)

      //  并作出提示语句   xxx 向你发送了一条私聊消息
      this.$store.commit('timMessage/showMessage', {
        message: this.selectName(messageList[0].from) + ' : 向你发送了一条私聊消息',
        type: 'success'
      })
    },


  }


}
</script>
